# 美国国债以10年期3%等额本金的月度偿还额 vs 美国政府税收收入（折线图）
from datetime import datetime
from utils.akcache import Cache
import akshare as ak
import pandas as pd
import matplotlib.pyplot as plt

# 读取国债数据到DataFrame
df_debt = pd.read_csv("data/origin/USA/DebtPenny_19930401_20250930.csv")
df_debt = df_debt[['日期', '国债总额']]
df_debt['日期'] = pd.to_datetime(df_debt['日期'])

# 读取税收数据到DataFrame
df_income = pd.read_csv("data/origin/USA/USGovtRevCollect_20041001_20250930.csv")
df_income = df_income[['日期', '净征收金额']]
df_income['日期'] = pd.to_datetime(df_income['日期'])

# 税收按日求和（以防原始表存在同日多条）
df_income = df_income.groupby('日期').sum().reset_index()

# 按月汇总（使用月末 ME）
df_debt_M = df_debt.set_index('日期').resample('ME').sum().reset_index()
df_debt_M['日期'] = pd.to_datetime(df_debt_M['日期'].dt.to_period('M').astype(str))

df_income_M = df_income.set_index('日期').resample('ME').sum().reset_index()
df_income_M['日期'] = pd.to_datetime(df_income_M['日期'].dt.to_period('M').astype(str))

# 计算“等额本金”方案下的月度首月偿还额（本金+当月利息）
monthly_principal_term = 120*3
annual_interest_rate = 0.03
monthly_interest_rate = annual_interest_rate / 12.0

df_debt_M['等额本金_首月月供'] = (
    df_debt_M['国债总额'] / monthly_principal_term + df_debt_M['国债总额'] * monthly_interest_rate
)

# 合并到同一表用于绘图
df_plot = pd.merge(df_debt_M[['日期', '等额本金_首月月供']],
                   df_income_M[['日期', '净征收金额']], on='日期', how='inner')

# 导出结果
df_plot.to_csv("data/temp/index_usa_debt_equal_principal_vs_income.csv", index=False, encoding='utf-8-sig')

# 画图
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'DejaVu Sans']
plt.figure(figsize=(12, 6))
plt.plot(df_plot['日期'], df_plot['等额本金_首月月供'], label='等额本金月供(首月, 30年3%)')
plt.plot(df_plot['日期'], df_plot['净征收金额'], label='美国政府税收收入')
plt.title('美国国债等额本金(10年3%)首月月供 vs 美国政府税收收入（按月）')
plt.xlabel('日期')
plt.ylabel('金额')
plt.legend()
plt.grid(True, alpha=0.3)
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig("data/temp/index_usa_debt_equal_principal_vs_income.png", dpi=300, bbox_inches='tight')
plt.show()
